
#ifndef __EVENT_DISPATCH_H__
#define __EVENT_DISPATCH_H__

#include "EventListener.h"

/*
    事件派发器

    需要派发事件可以对外提供一个事件派发器

    事件派发器的事件对象会被自动移除，请勿手动delect

    事件派发器在自身需要被移除时会移除所有事件监听器
    在派发事件时会对所有
*/


class EventDispatch : public Obj
{
public:
    EventDispatch();
    ~EventDispatch();

    // 基础派发事件
    void DispatchEvent(const std::string& name);
    void DispatchEvent(const std::string& name, Obj* info);
    void DispatchEvent(const std::string& name, Obj* info, EventBase* event);

private:
    friend class EventListener;

    // 添加监听器
    void AddListener(EventListener* listener);

    // 移除监听器
    void RemoveListener(EventListener* listener);

    // 移除所有监听器
    void Clear();

    // 是否处于事件派发状态
    bool IsDispatching() const;

private:
    std::vector<EventListener*> listenerList_;      // 监听器列表
    bool isDispatching_;                            // 是否处于派发状态
};



#endif
